/**
 * 
 */
package mx.frantor.catalogos.daoimp;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import mx.frantor.catalogos.dao.DetallePedidoDAO;
import mx.frantor.catalogos.entitys.DetallePedidoEntity;
import mx.frantor.util.HibernateUtil;

/**
 * @author Hp
 *
 */
public class DetallePedidoDAOImpl implements DetallePedidoDAO {

	/* (non-Javadoc)
	 * @see mx.frantor.catalogos.dao.DetallePedidoDAO#agregarDetallePedido(mx.frantor.catalogos.entitys.DetallePedidoEntity)
	 */
	@Override
	public String agregarDetallePedido(DetallePedidoEntity nuevoDetallePedido) {
		// TODO Auto-generated method stub
		String e = "";
		Session session = HibernateUtil.getSessionFactory()
				.getCurrentSession();
		
		session.beginTransaction();
		try {
		session.save(nuevoDetallePedido);
		session.flush();
		session.getTransaction().commit();
		} catch (Exception x) {
			//e.printStackTrace();
			session.getTransaction().rollback();
			e = x.getMessage();
			//return e.toString();
		}
		HibernateUtil.getSessionFactory().getCurrentSession().close();

		System.out.println("agregar detalle pedido resultado " + e);

		return e;
	}

	/* (non-Javadoc)
	 * @see mx.frantor.catalogos.dao.DetallePedidoDAO#modificarDetallePedido(mx.frantor.catalogos.entitys.DetallePedidoEntity)
	 */
	@Override
	public String modificarDetallePedido(
			DetallePedidoEntity modificarDetallePedido) {
		// TODO Auto-generated method stub
		String e = "";
		Session session = HibernateUtil.getSessionFactory()
				.getCurrentSession();
	
		session.beginTransaction();
		try {
			DetallePedidoEntity dpTemp = (DetallePedidoEntity) session.get(
					DetallePedidoEntity.class, modificarDetallePedido.getIdDetallePedido());
		session.flush();
		session.evict(dpTemp);
		session.update(modificarDetallePedido);
		session.getTransaction().commit();
		} catch (Exception x) {
			//e.printStackTrace();
			session.getTransaction().rollback();
			e = x.getMessage();
			//return e.toString();
		}
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		System.out.println("modificar detalle pedido resultado " + e);

		return e;
	}

	/* (non-Javadoc)
	 * @see mx.frantor.catalogos.dao.DetallePedidoDAO#eliminarDetallePedido(long)
	 */
	@Override
	public String eliminarDetallePedido(long idDetallePedido) {
		// TODO Auto-generated method stub
		String e = "";
		Session session = HibernateUtil.getSessionFactory()
				.getCurrentSession();
		

			// TODO Auto-generated method stub			
			session.beginTransaction();
			try {
				DetallePedidoEntity dpElimina = (DetallePedidoEntity) session.get(
						DetallePedidoEntity.class, idDetallePedido);
			session.delete(dpElimina);
			session.getTransaction().commit();
		} catch (Exception x) {
			//e.printStackTrace();
			session.getTransaction().rollback();
			e = x.getMessage();
			//return e.toString();
		}
		//HibernateUtil.getSessionFactory().getCurrentSession().close();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		System.out.println("eliminar detalle pedido resultado " + e);

		return e;
	}

	/* (non-Javadoc)
	 * @see mx.frantor.catalogos.dao.DetallePedidoDAO#getTodosDetallePedidoActivos()
	 */
	@SuppressWarnings("unchecked")
	@Override
	public List<DetallePedidoEntity> getTodosDetallePedidoActivos() {
		// TODO Auto-generated method stub
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<DetallePedidoEntity> dps = session.createCriteria(DetallePedidoEntity.class)
				.addOrder(Order.asc("IdDetallePedido")).list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		return dps;	
	}

	/* (non-Javadoc)
	 * @see mx.frantor.catalogos.dao.DetallePedidoDAO#getDetallePedidoId(long)
	 */
	@SuppressWarnings("unchecked")
	@Override
	public DetallePedidoEntity getDetallePedidoId(long idDetallePedido) {
		// TODO Auto-generated method stub
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<DetallePedidoEntity> dps = (List<DetallePedidoEntity>) session.createCriteria(DetallePedidoEntity.class)
				.add(Restrictions.eq("IdDetallePedido", idDetallePedido)).list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		if(dps==null){
			return null;
		}else{
			return dps.get(0);
		}
	}

	/* (non-Javadoc)
	 * @see mx.frantor.catalogos.dao.DetallePedidoDAO#getDetallePedidoPorId(long)
	 */
	@Override
	public List<DetallePedidoEntity> getDetallePedidoPorId(long idDetallePedido) {
		// TODO Auto-generated method stub
		return null;
	}
	@SuppressWarnings("unchecked")
	@Override
	public List<DetallePedidoEntity> getCatalogoPPorIdProducto(
			long idProducto) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<DetallePedidoEntity> remanuf = session.createCriteria(DetallePedidoEntity.class)
				.add(Restrictions.eq("IdPedido", idProducto)).list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		return remanuf;
	}
	@Override
	public String cambiaEstatus(long idDetPedido, String estatus){
		String e = "";
		Session session = HibernateUtil.getSessionFactory()
				.getCurrentSession();
	
		session.beginTransaction();
		try {
			DetallePedidoEntity pedidosTemp = (DetallePedidoEntity) session.get(
					DetallePedidoEntity.class, idDetPedido );
		session.flush();
		session.evict(pedidosTemp);
		pedidosTemp.setEstatus(estatus);
		session.update(pedidosTemp);
		session.getTransaction().commit();
		} catch (Exception x) {
			//e.printStackTrace();
			session.getTransaction().rollback();
			e = x.getMessage();
			//return e.toString();
		}
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		System.out.println("modificar pedidos resultado " + e);

		return e;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<DetallePedidoEntity> getCatalogoPPorIdPedido(Long idPedido) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<DetallePedidoEntity> lstDetallePHoja = session.createCriteria(DetallePedidoEntity.class)
				.add(Restrictions.eq("IdPedido", idPedido))
				.addOrder(Order.asc("Estatus")).list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		return lstDetallePHoja;
	}
}
